package Controller;

import Model.Model;
import utils.Lock;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Controller implements ActionListener {
//==========================================================
    //Controller层体现出了controller尝试解释用户的输入是什么意义
    //并且把 用户输入（按钮回调事件）【映射】到Model层具体的处理函数
    //          Model层处理函数就是    Model.getInstance().setText(textField.getText());
//==========================================================
    @Override
    public void actionPerformed(ActionEvent e) {
        // 判断触发事件的是不是button（我的View里面，只存在一个Button，所以只要是Button的触发就行）
        if(e.getSource() instanceof JButton){
            // 使用事件对象ActionEvent获取触发事件的JButton
            JButton jButton = (JButton) e.getSource();
            // 获取这个按钮所在的container（容器，就是JPannel这种）
            Container container = jButton.getParent();
//==========================================================
            //现在我想在Controller类里面，获取到View界面上的各个控件，以便于解释他们的 行为
//==========================================================
            JTextField textField = null;
            JLabel jLabel = null;
            // 获取这个容器的所有子组件，挨个遍历
            Component[] componentsArray = container.getComponents();
            // 通过for循环遍历这个container内所有组件，反正我知道这个容器里面只有三种对象，挨个赋值
            for(int i=0;i<componentsArray.length;i++){
                //System.out.println(componentsArray[i]);
                if(componentsArray[i] instanceof JTextField){
                    textField = (JTextField) componentsArray[i];
                }
                if(componentsArray[i] instanceof JLabel){
                    jLabel = (JLabel) componentsArray[i];
                }
            }
            // 尝试直接把jLabel的值设置为textField的值
            // jLabel.setText(textField.getText());
//==========================================================
            // 这里把“按下按钮”的“用户操作行为”【解释】为Model层要去做的【更新文本】操作
//==========================================================
            Model.getInstance().setText(textField.getText());// 线程安全的更新
        }
    }
}
//https://bbs.csdn.net/topics/310112877  JButton对象如何获取其所在窗口的JFrame对象